home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / vidhrdw / ohmygod.c < prev    next >
C/C++ Source or Header  |  2000-05-06  |  3KB  |  125 lines

  1. #include "driver.h"
  2. #include "vidhrdw/generic.h"
  3.  
  4.  
  5. unsigned char *ohmygod_videoram;
  6.  
  7. static int spritebank;
  8. static struct tilemap *bg_tilemap;
  9.  
  10.  
  11.  
  12. /***************************************************************************
  13.  
  14.   Callbacks for the TileMap code
  15.  
  16. ***************************************************************************/
  17.  
  18. static void get_tile_info(int tile_index)
  19. {
  20.     UINT16 code = READ_WORD(&ohmygod_videoram[4*tile_index+2]);
  21.     UINT16 attr = READ_WORD(&ohmygod_videoram[4*tile_index]);
  22.     SET_TILE_INFO(0,code,(attr & 0x0f00) >> 8)
  23. }
  24.  
  25.  
  26.  
  27. /***************************************************************************
  28.  
  29.   Start the video hardware emulation.
  30.  
  31. ***************************************************************************/
  32.  
  33. int ohmygod_vh_start(void)
  34. {
  35.     bg_tilemap = tilemap_create(get_tile_info,tilemap_scan_rows,TILEMAP_OPAQUE,8,8,64,64);
  36.  
  37.     if (!bg_tilemap)
  38.         return 1;
  39.  
  40.     return 0;
  41. }
  42.  
  43.  
  44.  
  45. /***************************************************************************
  46.  
  47.   Memory handlers
  48.  
  49. ***************************************************************************/
  50.  
  51. READ_HANDLER( ohmygod_videoram_r )
  52. {
  53.    return READ_WORD(&ohmygod_videoram[offset]);
  54. }
  55.  
  56. WRITE_HANDLER( ohmygod_videoram_w )
  57. {
  58.     int oldword = READ_WORD(&ohmygod_videoram[offset]);
  59.     int newword = COMBINE_WORD(oldword,data);
  60.  
  61.     if (oldword != newword)
  62.     {
  63.         WRITE_WORD(&ohmygod_videoram[offset],newword);
  64.         tilemap_mark_tile_dirty(bg_tilemap,offset/4);
  65.     }
  66. }
  67.  
  68. WRITE_HANDLER( ohmygod_spritebank_w )
  69. {
  70.     spritebank = data & 0x8000;
  71. }
  72.  
  73. WRITE_HANDLER( ohmygod_scroll_w )
  74. {
  75.     if (offset == 0) tilemap_set_scrollx(bg_tilemap,0,data - 0x81ec);
  76.     else tilemap_set_scrolly(bg_tilemap,0,data - 0x81ef);
  77. }
  78.  
  79.  
  80. /***************************************************************************
  81.  
  82.   Display refresh
  83.  
  84. ***************************************************************************/
  85.  
  86. static void draw_sprites(struct osd_bitmap *bitmap)
  87. {
  88.     int offs;
  89.  
  90.     for (offs = 0;offs < spriteram_size;offs += 8)
  91.     {
  92.         int sx,sy,code,color,flipx;
  93.         unsigned char *sr;
  94.  
  95.         sr = spritebank ? spriteram_2 : spriteram;
  96.  
  97.         code = READ_WORD(&sr[offs+6]) & 0x0fff;
  98.         color = READ_WORD(&sr[offs+4]) & 0x000f;
  99.         sx = READ_WORD(&sr[offs+0]) - 29;
  100.         sy = READ_WORD(&sr[offs+2]);
  101.         if (sy >= 32768) sy -= 65536;
  102.         flipx = READ_WORD(&sr[offs+6]) & 0x8000;
  103.  
  104.         drawgfx(bitmap,Machine->gfx[1],
  105.                 code,
  106.                 color,
  107.                 flipx,0,
  108.                 sx,sy,
  109.                 &Machine->drv->visible_area,TRANSPARENCY_PEN,0);
  110.     }
  111. }
  112.  
  113. void ohmygod_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh)
  114. {
  115.     tilemap_update(ALL_TILEMAPS);
  116.  
  117.     if (palette_recalc())
  118.         tilemap_mark_all_pixels_dirty(ALL_TILEMAPS);
  119.  
  120.     tilemap_render(ALL_TILEMAPS);
  121.  
  122.     tilemap_draw(bitmap,bg_tilemap,0);
  123.     draw_sprites(bitmap);
  124. }
  125.